/**
 * @param {number} target
 * @param {number[]} nums
 * @return {number}
 */
var minSubArrayLen = function (target, nums) {
    // S1 初始化窗口左右指针、窗口长度结果以及当前窗口和
    let l = 0
    let r = 0
    let sum = 0
    let res = Infinity

    // S2 模拟像右滑动Ï
    while (r < nums.length) {
        // S3 寻找可行解
        sum += nums[r]
        r++
        // S4 当已找到可行解时，缩小窗口以优化
        while (sum >= target) {
            // S4-1 更新结果值
            res = Math.min(res, r - l)
            // S4-2 缩小窗口
            sum -= nums[l]
            l++
        }
    }
    return res > nums.length ? 0 : res
};